package com.shujia.scala

// 类中可以定义 变量、方法、构造函数
class Stu(id: String, name: String, age: Int) {
  println("这是默认的构造函数")
  // 定义即赋值
  val _id = id
  val _name = name
  val _age = age
  var _clazz: String = _ // _表示待会再赋值 相当于占位符

  // 重写构造方法 那么就需要重新实现this方法
  def this(id: String, name: String, age: Int, clazz: String) = {
    // 在这个this方法第一行代码 必须是调用默认的构造方法
    this(id, name, age)
    println("重写构造方法")
    _clazz = clazz

  }

  // 重写父类的方法
  override def toString(): String = {
    // return 可以省略 默认会将最后一行作为返回值
    s"Stu(${_id}, ${_name}, ${_age},${_clazz})"
  }

  def hello(): Unit = {
    println("hello")
  }
}

object Demo8ScalaClass {
  def main(args: Array[String]): Unit = {
    // 创建对象
    val stu1 = new Stu("0001", "张三", 19)
    println(stu1)
    println(stu1._name)
    stu1.hello()

    val stu2 = new Stu("0002", "李四", 19, "文科一班")
    println(stu2)
    println(stu2._name)
    stu2.hello()

  }
}
